import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

/**
 * @description:集合与数组
 * @author:Mr.Cat
 * @create:2021-10-07 21:41
 **/
/*
* 一、集合框架的概述
* 1、集合、数组都是对多个数据进行存储操作的结构，简称Java容器
* 说明：此时的存储，主要指的是内存层面的存储，不涉及到持久化的存储（.txt,.jpg,.avi,数据库中）
*
* 2.1、数组在存储多个数据方面的特点：
*   1、一旦初始化以后，其长度确定了。
*   2、数组一旦定义后，其元素的类型也确定了，我们也就只能操作指定类型的数据了。
*       比如：String[] arr;int []arr1;
* 2.2、数组在存储多个数据方面的缺点：
*   1、一旦定义初始化，长度不可修改
*   2、数组中提供的方法非常有限，对于添加、删除、插入数据非常不便，同时效率不高。
*   3、数组存储数据的特点：有序、可重复。对于无序、不可重复的需求，不能满足。
*
* 二、集合框架
*   Collection接口：单列集合：用来存储一个一个的对象
*       List接口：存储有序的、可重复的数据。         --->"动态"数组
*           ArrayList、LinkedList、Vector
*
*       Set接口：存储无序的、不可重复的数据。        --->高中讲的"集合"
*           HashSet、LinkedHashSet、TreeSet
*
*   Map接口：双列集合，用来存储一对（key ---- value）一对的数据      -->高中的函数：Y=f(x)
*       HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
*
* 三、Collection接口中的方法
*   1、
*
* */
public class JiHeDemo1 {

    @Test
    public void test1(){
        Collection coll=new ArrayList();

        //add(Object e);：将元素e添加到集合coll中
        coll.add("AA");
        coll.add("BB");
        coll.add(123);//自动装箱
//        coll.add(new Date());

        //size();:获取添加的元素的个数
        System.out.println(coll.size());//3

        //addAll(Collection coll1);:将coll1集合中的每个元素添加到当前的集合中
        Collection coll1=new ArrayList();
        coll1.add(456);
        coll1.add("CC");
        coll.addAll(coll1);
        //coll.add(coll1)//将整个coll1集合做为coll集合的元素

        System.out.println(coll.size());//5
        System.out.println(coll1);

        //clear();:清空集合元素
        coll.clear();


        //isEmpty();:判断当前集合是否为空
        System.out.println(coll.isEmpty());

        //contains(Object obj):判断当前集合中是否包含Obj
        boolean contains = coll.contains(123);
        System.out.println(contains);
        System.out.println(coll.contains(new String("Tom")));

        //containsAll(Collection coll1):判断形参coll1中的所有元素是否都存在于当前集合中
        Collection coll2 = Arrays.asList(123,4567);
        System.out.println(coll.containsAll(coll2));

        //remove(Object obj):从当前集合中移除obj元素
        //coll1.remove(123);

        //removeAll(Collection coll1):从当前集合中移除coll1中所有的元素
        //coll.removeAll(coll1);

        //retainAll(Collection aoll1):交集：获取当前集合和coll1集合的交集，并返回给当前集合

        //hashCode():返回当前对象的哈希值
        System.out.println(coll.hashCode());

        //集合——>数组：toArray()
        Object[] arr = coll.toArray();
        for(int i=0;i< arr.length;i++){
            System.out.println(arr[i]);
        }

        //拓展：数组--集合
        List<String> strings = Arrays.asList(new String[]{"AA", "BB", "CC"});
        System.out.println(strings);

        List arr1=Arrays.asList(new int[]{123,456});
        System.out.println(arr1);

        //iterator():返回Iterator接口的实例，用于遍历集合元素。放在IteratorTest.java中

    }
    @Test
    public void test3(){
        Integer[] all = new Integer[2];
        List<Integer> small1 = new ArrayList<>();
        small1.add(1);
        List<Integer> small2 = new ArrayList<>();
        small2.add(2);
    }

}

